# -*- coding: utf-8 -*-
# __author__:heliujiang
# 2022/4/4 14:54
import requests
import config
from common.test_log import create_logger

class Application:
    _instance = None
    logger = create_logger()

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

    def __init__(self, host):
        if host == 'dev':
            self.host = config.DEV_URL
        elif host == 'uat':
            self.host = config.UAT_URL
        elif host == 'pro':
            self.host = config.PRO_URL

    # 应用列表
    def get_app_lit(self, test_data, token):
        """
        发送HTTP GET请求以获取应用列表。

        参数:
        - test_data: dict, 包含请求参数的字典，其中包含如下键：
          - seriesCode: str, 车系代码。
          - goodsTypeId: int, 货物类型ID（可选）。
          - pageNum: int, 页码。
          - pageSize: int, 每页大小。
          - userId: str, 用户ID。
          - modelCode: str, 车型代码。
          - vin: str, 车辆识别码。
        - token: str, 用于验证的令牌。

        返回:
        - response: requests.Response对象，包含HTTP响应。

        """
        url = self.host + '/appstore/goods/application/list'
        res = requests.get(url=url, params=test_data, headers={'token': token})
        self.logger.info(f"url:{url} | request: {test_data}")
        self.logger.info(f"Response status code: {res.status_code} | Response text{res.text}")
        return res

    # 应用分类类型
    def get_app_type(self, test_data, token):
        """
        发送HTTP GET请求以获取应用类型列表。

        参数:
        - test_data: dict, 一个字典，包含以下键：
          - type: int, 应用类型标识 应用1
          - seriesCode: str, 车系编码。
        - token: str, 用于API认证的令牌。

        返回:
        - res: requests.Response对象, 包含HTTP请求的响应。

        """
        url = self.host + '/appstore/goods/type/list'
        res = requests.get(url=url, params=test_data, headers={'token': token})
        self.logger.info(f"url:{url} | request: {test_data}")
        self.logger.info(f"Response status code: {res.status_code} | Response text{res.text}")
        return res

    # 应用详情
    def get_app_detail(self, test_data, token):
        """
        请求获取特定应用的详细信息。

        参数:
        - test_data: dict, 包含请求参数的字典，其中包含：
          - id: int, 要查询的应用的ID。
          - userId: str, 用户ID，用于定位特定的应用实例。
        - token: str, 用于API认证的令牌。

        返回:
        - res: requests.Response对象, 表示HTTP请求的响应。

        """
        url = self.host + '/appstore/goods/application/detail'
        res = requests.get(url=url, params=test_data, headers={'token': token})
        self.logger.info(f"url:{url} | request: {test_data}")
        self.logger.info(f"Response status code: {res.status_code} | Response text{res.text}")
        return res

    # 应用下载上报
    def post_app_updateDowloads(self, test_data, token):
        """
        通过HTTP POST请求更新应用的下载信息。

        参数:
        - test_data: dict, 包含更新操作所需参数的字典，其中包含：
          - id: int, 要更新的应用的ID。
        - token: str, 用于API认证的令牌。

        返回:
        - res: requests.Response对象, 表示HTTP POST请求的响应。

        """
        url = self.host + '/appstore/goods/application/update-downloads'
        res = requests.post(url=url, params=test_data, headers={'token': token})
        self.logger.info(f"url:{url} | request: {test_data}")
        self.logger.info(f"Response status code: {res.status_code} | Response text{res.text}")
        return res
